package br.com.inner.modelo;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.TableGenerator;
import javax.persistence.ManyToMany;
import javax.persistence.JoinTable;

@Entity
@Table(name="Empresa")
@NamedQueries({
	@NamedQuery(name="Empresas",
			query="SELECT e FROM Empresa e WHERE e.nomeFantasia like :nmFantasia")
})
public class Empresa {

	@Id
	@GeneratedValue(generator="EmpresaTab")
	@TableGenerator(name="EmpresaTab", table="TABLE_GEN",
            pkColumnName="ID_NAME", valueColumnName="ID_VAL",
            pkColumnValue="EMPRESA_GEN", allocationSize=1)
	@Column(name="cdEmpresa")
	private BigDecimal cdEmpresa;
	
	@OneToOne
	@JoinColumn(name="cdCategoria")
	private Categoria categoria;
	
	@Column(name="razaoSocial", length=50)
	private String razaoSocial;
	
	@Column(name="nomeFantasia", length=50)
	private String nomeFantasia;
	
	@Column(name="cgc", length=50)
	private String cgc;
	
	@Column(name="logradouro", length=50)
	private String logradouro;
	
	@Column(name="numero", length=50)
	private String numero;
	
	@Column(name="complemento", length=50)
	private String complemento;
	
	@Column(name="bairro", length=50)
	private String bairro;
	
	@Column(name="cep", length=50)
	private String cep;
	
	@Column(name="cidade", length=50)
	private String cidade;
	
	@OneToOne
	@JoinColumn(name="cdUf")
	private UF uf;
	
	@Column(name="telefone1", length=50)
	private String telefone1;
	
	@Column(name="telefone2", length=50)
	private String telefone2;
	
	@Column(name="celular1", length=50)
	private String celular1;
	
	@Column(name="celular2", length=50)
	private String celular2;
	
	@Column(name="fax", length=50)
	private String fax;
	
	@Column(name="emailEmpresa", length=50)
	private String emailEmpresa;
	
	@Column(name="nomeContato", length=50)
	private String nomeContato;
	
	@Column(name="cargoContato", length=50)
	private String cargoContato;
	
	@Column(name="setorContato", length=50)
	private String setorContato;
	
	@Column(name="telefoneContato", length=50)
	private String telefoneContato;
	
	@Column(name="ramalContato", length=50)
	private String ramalContato;
	
	@Column(name="celularContato", length=50)
	private String celularContato;
	
	@Column(name="emailContato", length=50)
	private String emailContato;
	
	/*@ManyToMany(mappedBy="destinatarios")
	private List<Job> jobs;*/
	
	@OneToMany(cascade={CascadeType.PERSIST, CascadeType.MERGE }, mappedBy="empresa")
	private List<JobEmpresa> jobs1;
	
	@OneToMany(mappedBy="empresa", cascade = CascadeType.ALL)
	private List<Usuario> usuarios;

	public List<Usuario> getUsuarios() {
		return usuarios;
	}

	public void setUsuarios(List<Usuario> usuario) {
		this.usuarios = usuario;
	}

	public String getBairro() {
		return bairro;
	}

	public void setBairro(String bairro) {
		this.bairro = bairro;
	}

	public Categoria getCategoria() {
		return categoria;
	}

	public void setCategoria(Categoria categoria) {
		this.categoria = categoria;
	}

	public BigDecimal getCdEmpresa() {
		return cdEmpresa;
	}

	public void setCdEmpresa(BigDecimal cdEmpresa) {
		this.cdEmpresa = cdEmpresa;
	}

	public String getCelular1() {
		return celular1;
	}

	public void setCelular1(String celular1) {
		this.celular1 = celular1;
	}

	public String getCelular2() {
		return celular2;
	}

	public void setCelular2(String celular2) {
		this.celular2 = celular2;
	}

	public String getCep() {
		return cep;
	}

	public void setCep(String cep) {
		this.cep = cep;
	}

	public String getCgc() {
		return cgc;
	}

	public void setCgc(String cgc) {
		this.cgc = cgc;
	}

	public String getCidade() {
		return cidade;
	}

	public void setCidade(String cidade) {
		this.cidade = cidade;
	}

	public String getComplemento() {
		return complemento;
	}

	public void setComplemento(String complemento) {
		this.complemento = complemento;
	}

	public String getFax() {
		return fax;
	}

	public void setFax(String fax) {
		this.fax = fax;
	}

	public String getLogradouro() {
		return logradouro;
	}

	public void setLogradouro(String logradouro) {
		this.logradouro = logradouro;
	}

	public String getNomeFantasia() {
		return nomeFantasia;
	}

	public void setNomeFantasia(String nomeFantasia) {
		this.nomeFantasia = nomeFantasia;
	}

	public String getNumero() {
		return numero;
	}

	public void setNumero(String numero) {
		this.numero = numero;
	}

	public String getRazaoSocial() {
		return razaoSocial;
	}

	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}

	public String getTelefone1() {
		return telefone1;
	}

	public void setTelefone1(String telefone1) {
		this.telefone1 = telefone1;
	}

	public String getTelefone2() {
		return telefone2;
	}

	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}

	public UF getUf() {
		return uf;
	}

	public void setUf(UF uf) {
		this.uf = uf;
	}

	public String getEmailEmpresa() {
		return emailEmpresa;
	}

	public void setEmailEmpresa(String emailEmpresa) {
		this.emailEmpresa = emailEmpresa;
	}

	public String getCargoContato() {
		return cargoContato;
	}

	public void setCargoContato(String cargoContato) {
		this.cargoContato = cargoContato;
	}

	public String getCelularContato() {
		return celularContato;
	}

	public void setCelularContato(String celularContato) {
		this.celularContato = celularContato;
	}

	public String getEmailContato() {
		return emailContato;
	}

	public void setEmailContato(String emailContato) {
		this.emailContato = emailContato;
	}

	public String getNomeContato() {
		return nomeContato;
	}

	public void setNomeContato(String nomeContato) {
		this.nomeContato = nomeContato;
	}

	public String getRamalContato() {
		return ramalContato;
	}

	public void setRamalContato(String ramalContato) {
		this.ramalContato = ramalContato;
	}

	public String getSetorContato() {
		return setorContato;
	}

	public void setSetorContato(String setorContato) {
		this.setorContato = setorContato;
	}

	public String getTelefoneContato() {
		return telefoneContato;
	}

	public void setTelefoneContato(String telefoneContato) {
		this.telefoneContato = telefoneContato;
	}

	/*public List<Job> getJobs() {
		return jobs;
	}

	public void setJobs(List<Job> jobs) {
		this.jobs = jobs;
	}*/
	
	public List<JobEmpresa> getJobs(){
		return jobs1;
	}
	
	public void setJobs(List<JobEmpresa> jobs1){
		this.jobs1 = jobs1;
	}
	
	public List<Job> getJobs1() {
		
		
		ArrayList<Job> advList = new ArrayList<Job>();
		
		if ( jobs1 == null ){
			return advList;
		}
		
		for (JobEmpresa ap : jobs1) {
			advList.add(ap.getJob());
		}
		
		return advList;
	}
	
	public void addJob(Job job, Date dtRecebimento, StatusJob status){
		
		if ( jobs1 == null ){
			jobs1 = new ArrayList<JobEmpresa>();
		}
		jobs1.add(new JobEmpresa(job, this , dtRecebimento, status));
	}

}
